bbaf099fb3804aa925a6f255eb51b8ce53b20925,src/com/redhat/ceylon/compiler/codegen/StatementTransformer.java,StatementTransformer,transform,#Tree.ForStatement#,214

Before Change


        JCExpression step = at(stmt).Assign(iter_id, at(stmt).Apply(null, makeSelect(iter_id, Util.getGetterName("tail")), List.<JCExpression> nil()));
        
        // $i$iter$1.getHead() != null;
        JCExpression cond = at(stmt).Binary(JCTree.NE, iter_head, makeNull());
        
        // for (.ceylon.language.Iterator<T> $V$iter$X = ITERABLE.iterator(); $V$iter$X.getHead() != null; $V$iter$X = $V$iter$X.getTail()) {
        outer = outer.append(at(stmt).ForLoop(

After Change


        // Watch out that we can't reuse tree bits in different locations, otherwise we break javac, since
        // it will later on tag each tree bit while walking it and expects each node to be unique
        // See https://github.com/ceylon/ceylon-compiler/issues/151
        JCExpression iter_head2 = at(stmt).Apply(null, makeSelect(iter_id, Util.getGetterName("head")), List.<JCExpression> nil());
        JCExpression cond = at(stmt).Binary(JCTree.NE, iter_head2, makeNull());
        
        // for (.ceylon.language.Iterator<T> $V$iter$X = ITERABLE.iterator(); $V$iter$X.getHead() != null; $V$iter$X = $V$iter$X.getTail()) {
        outer = outer.append(at(stmt).ForLoop(